﻿/// <summary>
/// Script de controlador del layaut del site.
/// </summary>
/// <remarks>
/// Creacion: 	GMD(EMP) 24/03/2015
/// </remarks>
ns('Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.FormularioRegistro');
Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.FormularioRegistro.Controller = function () {
    var base = this;
    base.Ini = function () {
        'use strict'

        base.Control.TabFormularioRegistro().tabs();

        base.Control.ValFormularioRegistro = new Pe.GMD.UI.Web.Components.Validator({
            form: base.Control.FrmFormularioRegistro(),
            messages: Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyectoResource,
            validationsExtra: base.Function.ObtenerValidacionesAdicionales()
        });

        base.Control.FormularioGrupoDetalle.ValFormularioRegistro = new Pe.GMD.UI.Web.Components.Validator({
            form: base.Control.FormularioGrupoDetalle.FrmRegistro(),
            messages: Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyectoResource
        });

        base.Control.FormularioGrupoDetalle.DlgFormulario = new Pe.GMD.UI.Web.Components.Dialog({
            title: 'Agregar Grupo',
            target: 'divGrupoDetalleContainer'
        });

        base.Control.BtnGrabar().click(base.Event.BtnGrabarClick);
        base.Control.BtnCopiar().click(base.Event.BtnCopiarClick);
        base.Control.BtnExportar().click(base.Event.BtnExportarClick);

        //base.Control.BtnAprobarRegistro().click(base.Event.BtnAprobarRegistroClick);
        //base.Control.BtnPreAprobarRegistro().click(base.Event.BtnPreAprobarRegistroClick);
        //base.Control.BtnAceptarRegistro().click(base.Event.BtnAceptarRegistroClick);

        base.Control.BtnCancelar().click(base.Event.BtnCancelarClick);
        base.Control.BtnAgregarArticulo().click(base.Event.BtnAgregarArticuloClick);
        base.Control.BtnEliminarArticulo().click(base.Event.BtnEliminarArticuloClick);
        base.Control.BtnAgregarGrupo().click(base.Event.BtnAgregarGrupoClick);

        base.Control.FormularioGrupoDetalle.BtnCancelar().click(base.Event.FormularioGrupoDetalle.BtnCancelarClick);
        base.Control.FormularioGrupoDetalle.BtnGrabar().click(base.Event.FormularioGrupoDetalle.BtnGrabarClick);

        base.Function.CrearGrid();

        //base.Control.TxtCliente().tokenInput(Pe.Petecos.Comercial.Presentacion.General.MantenerCliente.Actions.Buscar, {


        //    hintText: 'Ingrese el termino a buscar',
        //    noResultsText: 'No se encontraron resultados',
        //    searchingText: 'Buscando...',


        //    method: 'POST',
        //    tokenLimit: 1,
        //    queryParam: 'NombreCliente',
        //    propertyToSearch: 'NombreCliente',
        //    minChars: 3,
        //    resultsFormatter: function (item) {
        //        return "<li>" + item.NombreCliente + "</li>"
        //    },
        //    tokenFormatter: function (item) {
        //        return "<li>" + item.NombreCliente + "</li>"
        //    },
        //    onResult: function (data) {
        //        return data.Result;
        //    },
        //    onAdd: function (item) {
        //        base.Parameters.Cliente = item;
        //        base.Function.CargarCliente(base.Parameters.Cliente);
        //    },
        //    onDelete: function (item) {
        //        base.Control.TxtContacto().val('');
        //        base.Control.TxtNumeroDocumento().val('');
        //        base.Control.TxtCorreoElectronico().val('');
        //        base.Control.TxtTelefono().val('');
        //        base.Parameters.Cliente = null;
        //    }
        //});

        base.Control.FrmBusquedaArticulo = new Pe.Petecos.Comercial.Presentacion.General.Comun.BusquedaArticuloProveedor.Controller({
            AgregarSuccess: base.Event.AgregarSuccess
        });

        if (Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.Model.Proyecto != null) {
            base.Function.CargarProyecto(Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.Model.Proyecto);
            base.Function.ConfigurarOpciones(Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.Model.Proyecto);
        }

        //$('input, select, textarea').each(
        //    function (index) {
        //        var input = $(this);
        //        txtGrupoDetalleNombre
        //        input.attr('disabled', 'disabled');
        //    }
        //);
    };

    base.Parameters = {
        Cliente: null,
        Proyecto: {
            CodigoProyecto: 0
        }
    };

    base.Control = {
        FrmBusquedaArticulo: null,

        ValFormularioRegistro: null,

        Mensaje: new Pe.GMD.UI.Web.Components.Message(),
        FrmFormularioRegistro: function () { return $('#frmFormularioRegistro'); },
        TabFormularioRegistro: function () { return $('#tabFormularioRegistro'); },

        TxtCodigo: function () { return $('#txtFormularioRegistroCodigo'); },

        SlcTipoProyecto: function () { return $('#slcFormularioRegistroTipoProyecto'); },
        SlcMoneda: function () { return $('#slcFormularioRegistroMoneda'); },

        TxtCliente: function () { return $('#txtFormularioRegistroCliente'); },
        TxtContacto: function () { return $('#txtFormularioRegistroContacto'); },
        TxtNumeroDocumento: function () { return $('#txtFormularioRegistroNumeroDocumento'); },
        TxtCorreoElectronico: function () { return $('#txtFormularioRegistroCorreoElectronico'); },
        TxtTelefono: function () { return $('#txtFormularioRegistroTelefono'); },
        TxtNombreProyecto: function () { return $('#txtFormularioRegistroNombreProyecto'); },
        TxtFechaProyecto: function () { return $('#txtFormularioRegistroFechaProyecto'); },

        TxtLugarProyecto: function () { return $('#txtFormularioRegistroLugarProyecto'); },
        TxtEncargadoProyecto: function () { return $('#txtFormularioRegistroEncargadoProyecto'); },
        TxtObjetivo: function () { return $('#txtFormularioRegistroObjetivo'); },
        TxtObservaciones: function () { return $('#txtFormularioRegistroObservaciones'); },

        BtnCancelar: function () { return $('#btnCancelarRegistro'); },
        BtnGrabar: function () { return $('#btnGrabarRegistro'); },
        BtnCopiar: function () { return $('#btnCopiarRegistro'); },
        BtnExportar: function () { return $('#btnExportarRegistro'); },

        BtnPreAprobarRegistro: function () { return $('#btnPreAprobarRegistro'); },
        BtnAprobarRegistro: function () { return $('#btnAprobarRegistro'); },
        BtnAceptarRegistro: function () { return $('#btnAceptarRegistro'); },

        BtnAgregarArticulo: function () { return $('#btnAgregarArticulo'); },
        BtnEliminarArticulo: function () { return $('#btnEliminarArticulo'); },
        BtnAgregarGrupo: function () { return $('#btnAgregarGrupo'); },

        TxtSubTotal: function () { return $('#txtFormularioRegistroSubTotal'); },
        TxtIgv: function () { return $('#txtFormularioRegistroIgv'); },
        TxtTotal: function () { return $('#txtFormularioRegistroTotal'); },


        DivGridDetalleContainer: function () { return $('#divGridDetalleContainer'); },
        GriDetalle: {
            Columns: null,
            Accordion: null
        },
        FormularioGrupoDetalle: {
            DlgFormulario: null,
            ValFormularioRegistro: null,
            TxtNombre: function () { return $('#txtGrupoDetalleNombre'); },
            BtnCancelar: function () { return $('#btnGrupoDetalleCancelar'); },
            BtnGrabar: function () { return $('#btnGrupoDetalleGrabar'); },
            FrmRegistro: function () { return $('#frmGrupoDetalleRegistro'); },
        }
    };

    base.Event = {
        FormularioGrupoDetalle: {
            BtnGrabarClick: function () {
                if (base.Control.FormularioGrupoDetalle.ValFormularioRegistro.isValid()) {
                    base.Function.CrearGrupo(base.Control.FormularioGrupoDetalle.TxtNombre().val());
                    base.Control.FormularioGrupoDetalle.DlgFormulario.close();
                }
            },
            BtnCancelarClick: function () {
                base.Control.FormularioGrupoDetalle.TxtNombre().val('');
                base.Control.FormularioGrupoDetalle.ValFormularioRegistro.reset();
                base.Control.FormularioGrupoDetalle.DlgFormulario.close();
            }
        },
        BtnGridEditClick: function () {
            base.Control.GrdDetalle.core.row($(this).parents('tr')).remove().draw();
        },
        BtnAgregarArticuloClick: function () {
            var cabeceras = base.Control.GriDetalle.Accordion.find("h3");

            if (cabeceras.length > 0) {
                base.Control.FrmBusquedaArticulo.Show();
            } else {
                base.Control.Mensaje.Warning({
                    message: 'Debe seleccionar el grupo donde se desee incluir los articulos'
                });
            }
            return false;
        },
        BtnEliminarArticuloClick: function () {
            var seleccionados = base.Control.DivGridDetalleContainer().find('input:checked');
            if (seleccionados.length > 0) {

                var elimina = base.Function.ValidarCantidadEliminar(base.Parameters.Proyecto.CodigoProyecto, $(seleccionados).val(), parseInt(seleccionados.closest('tr').find(".Cantidad").val()));
                if (elimina) {
                    $(seleccionados).each(function (index, seleccionado) {
                        seleccionados.closest('tr').remove();
                    });
                    base.Function.CalcularSubTotal();
                } else {
                    base.Control.Mensaje.Warning({
                        message: "La Cantidad ya fue asignada a una Orden de Compra, verifique"
                    });
                }
            } else {
                base.Control.Mensaje.Warning({
                    message: Pe.Petecos.Comercial.Presentacion.Base.MensajeGenerico.DebeSeleccionarRegistro
                });
            }
            return false;
        },
        BtnAgregarGrupoClick: function () {
            base.Control.FormularioGrupoDetalle.TxtNombre().val('');
            base.Control.FormularioGrupoDetalle.ValFormularioRegistro.reset();
            base.Control.FormularioGrupoDetalle.DlgFormulario.open();
            return false;
        },
        BtnCancelarClick: function () {
            'use strict'
            window.location.href = Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.Actions.Index;
        },
        BtnGrabarClick: function () {
            'use strict'
            var listaDetalle = base.Function.ObtenerDataDetalle();

            if (base.Control.ValFormularioRegistro.isValid()) {
                if (listaDetalle.length > 0) {

                    base.Control.Mensaje.Confirmation({

                        message: Pe.Petecos.Comercial.Presentacion.Base.MensajeGenerico.ConfirmacionGuardar,
                        onAccept: function () {
                            base.Ajax.AjaxGrabar.data = {
                                CodigoProyecto: base.Parameters.Proyecto.CodigoProyecto,
                                //CodigoCliente: base.Parameters.Cliente.CodigoCliente,
                                //NombreProyecto: base.Control.TxtNombreProyecto().val(),
                                //CodigoTipoProyecto: base.Control.SlcTipoProyecto().val(),
                                //CodigoMoneda: base.Control.SlcMoneda().val(),
                                //FechaProyecto: base.Control.TxtFechaProyecto().val(),
                                //LugarProyecto: base.Control.TxtLugarProyecto().val(),
                                //NombreEncargado: base.Control.TxtEncargadoProyecto().val(),
                                //Objetivo: base.Control.TxtObjetivo().val(),
                                Observaciones: base.Control.TxtObservaciones().val(),
                                //DocumentoContacto: base.Control.TxtNumeroDocumento().val(),
                                //NombreContacto: base.Control.TxtContacto().val(),
                                //CorreoElectronicoContacto: base.Control.TxtCorreoElectronico().val(),
                                //TelefonoContacto: base.Control.TxtTelefono().val(),

                                UsuarioCreacion: 'admin',
                                UsuarioModificacion: 'admin',
                                ListaProyectoDetalle: listaDetalle
                            };
                            base.Ajax.AjaxGrabar.submit();

                        }
                    });

                } else {
                    base.Control.Mensaje.Warning({
                        message: 'Debe ingresar al menos un articulo'
                    });
                }
            }
        },
        BtnCopiarClick: function () {
            'use strict'
            base.Ajax.AjaxCopiar.data = {
                codigo: base.Parameters.Proyecto.CodigoProyecto
            };
            base.Ajax.AjaxCopiar.submit();
        },
        BtnExportarClick: function () {
            window.open(Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.Actions.Exportar + "?codigo=" + base.Parameters.Proyecto.CodigoProyecto);
        },
        BtnPreAprobarRegistroClick: function () {
            'use strict'

            if (base.Parameters.Proyecto.CodigoProyecto > 0) {
                base.Control.Mensaje.Confirmation({
                    message: Pe.Petecos.Comercial.Presentacion.Base.MensajeGenerico.ConfirmacionGuardar,
                    onAccept: function () {
                        base.Ajax.AjaxPreAprobar.data = {
                            codigos: [base.Parameters.Proyecto.CodigoProyecto]
                        };
                        base.Ajax.AjaxPreAprobar.submit();
                    }
                });
            }
        },
        BtnAprobarRegistroClick: function () {
            'use strict'

            if (base.Parameters.Proyecto.CodigoProyecto > 0) {
                base.Control.Mensaje.Confirmation({
                    message: Pe.Petecos.Comercial.Presentacion.Base.MensajeGenerico.ConfirmacionGuardar,
                    onAccept: function () {
                        base.Ajax.AjaxAprobar.data = {
                            codigos: [base.Parameters.Proyecto.CodigoProyecto]
                        };
                        base.Ajax.AjaxAprobar.submit();
                    }
                });
            }
        },
        //BtnAceptarRegistroClick: function () {
        //    'use strict'

        //    if (base.Parameters.Proyecto.CodigoProyecto > 0) {
        //        base.Control.Mensaje.Confirmation({
        //            message: Pe.Petecos.Comercial.Presentacion.Base.MensajeGenerico.ConfirmacionGuardar,
        //            onAccept: function () {
        //                base.Ajax.AjaxAceptar.data = {
        //                    codigos: [base.Parameters.Proyecto.CodigoProyecto]
        //                };
        //                base.Ajax.AjaxAceptar.submit();
        //            }
        //        });
        //    }
        //},

        AgregarSuccess: function (seleccionados) {
            var correcto = true;
            var cabeceraActiva = base.Control.GriDetalle.Accordion.find('h3[aria-selected="true"]');
            var nodo = cabeceraActiva.val();
            var tbody = cabeceraActiva.next().find('tbody > tr');
            
            $(tbody).each(function (index, filas) {
                var codArticuloProveedor = $(filas).find('.CodigoArticuloProveedor').val();
                if (codArticuloProveedor == seleccionados[0].CodigoArticuloProveedor) {
                    correcto = false;
                }
            });

            if (correcto) {
                $(seleccionados).each(function (index, seleccionado) {
                    seleccionado.Cantidad = 1;
                    base.Function.CrearRow(seleccionado);
                });
                base.Function.CalcularSubTotal();
            } else {
                base.Control.Mensaje.Warning({
                    message: 'Articulo ya existe en el grupo: ' + nodo
                });
            }
        },
        AjaxGrabarSuccess: function (data) {
            'use strict'
            base.Control.Mensaje.Information({
                message: Pe.Petecos.Comercial.Presentacion.Base.MensajeGenerico.SeGuardoInformacionExito
            });

            Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.Model.Proyecto = data.Result;

            if (Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.Model.Proyecto != null) {
                base.Function.CargarProyecto(Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.Model.Proyecto);
                base.Function.ConfigurarOpciones(Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.Model.Proyecto);
            }

            //window.location.href = Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.Actions.Index;
        },
        AjaxPreAprobarSuccess: function (data) {
            if (data.CodeResult == -1) {
                base.Control.Mensaje.Warning({
                    message: 'Usted no cuenta con permisos para realizar esta operación'
                });
            } else {
                base.Control.Mensaje.Information({
                    message: Pe.Petecos.Comercial.Presentacion.Base.MensajeGenerico.SeGuardoInformacionExito
                });

                window.location.href = Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.Actions.Index;
            }

        },
        AjaxAprobarSuccess: function (data) {
            if (data.CodeResult == -1) {
                base.Control.Mensaje.Warning({
                    message: 'Usted no cuenta con permisos para realizar esta operación'
                });
            } else {
                base.Control.Mensaje.Information({
                    message: Pe.Petecos.Comercial.Presentacion.Base.MensajeGenerico.SeGuardoInformacionExito
                });

                window.location.href = Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.Actions.Index;
            }
        },
        AjaxAceptarSuccess: function (data) {
            if (data.CodeResult == -1) {
                base.Control.Mensaje.Warning({
                    message: 'Usted no cuenta con permisos para realizar esta operación'
                });
            } else {
                base.Control.Mensaje.Information({
                    message: Pe.Petecos.Comercial.Presentacion.Base.MensajeGenerico.SeGuardoInformacionExito
                });

                window.location.href = Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.Actions.Index;
            }
        },
        GridDetalleKeyup: function (that) {

            var tr = $(that).closest('tr');
            var cantidad = tr.find('.Cantidad').val();
            var precioUnitario = tr.find('.PrecioUnitario').val();
            var montoTotal = cantidad * precioUnitario;

            tr.find('.MontoTotal').html(montoTotal);

            Pe.GMD.UI.Web.Components.TextBox.Function.FormatDecimal({
                input: tr.find('.MontoTotal')
            });

            base.Function.CalcularSubTotal();
        },
        AjaxCopiarSuccess: function (data) {
            base.Control.Mensaje.Information({
                message: Pe.Petecos.Comercial.Presentacion.Base.MensajeGenerico.SeGuardoInformacionExito + ' Nuevo numero  de presupuesto  : ' + data.Result.CodigoProyecto
            });
        }
    };

    base.Ajax = {
        AjaxPreAprobar: new Pe.GMD.UI.Web.Components.Ajax({
            action: Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.Actions.PreAprobar,
            autoSubmit: false,
            onSuccess: base.Event.AjaxPreAprobarSuccess
        }),
        AjaxAprobar: new Pe.GMD.UI.Web.Components.Ajax({
            action: Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.Actions.Aprobar,
            autoSubmit: false,
            onSuccess: base.Event.AjaxAprobarSuccess
        }),
        AjaxAceptar: new Pe.GMD.UI.Web.Components.Ajax({
            action: Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.Actions.Aceptar,
            autoSubmit: false,
            onSuccess: base.Event.AjaxAceptarSuccess
        }),
        AjaxGrabar: new Pe.GMD.UI.Web.Components.Ajax({
            action: Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.Actions.Registrar,
            autoSubmit: false,
            onSuccess: base.Event.AjaxGrabarSuccess
        }),
        AjaxCopiar: new Pe.GMD.UI.Web.Components.Ajax({
            action: Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.Actions.Copiar,
            autoSubmit: false,
            onSuccess: base.Event.AjaxCopiarSuccess
        })
    };

    base.Function = {
        ConfigurarOpciones: function (model) {
            if (model.CodigoProyecto > 0) {
                base.Control.BtnCopiar().show();
                base.Control.BtnExportar().show();
            }

            if (model.CodigoEstado == Pe.Petecos.Comercial.Presentacion.Enumerados.EstadoProyecto.Registrado) {
                base.Control.BtnPreAprobarRegistro().show();
            } else if (model.CodigoEstado == Pe.Petecos.Comercial.Presentacion.Enumerados.EstadoProyecto.PreAprobado) {
                base.Control.BtnAprobarRegistro().show();
            } else if (model.CodigoEstado == Pe.Petecos.Comercial.Presentacion.Enumerados.EstadoProyecto.Aprobado) {
                //base.Control.BtnAceptarRegistro().show();
                base.Control.TxtObservaciones().attr("disabled", "disabled");
                base.Control.BtnGrabar().hide();
                base.Control.BtnAgregarArticulo().hide();
                base.Control.BtnEliminarArticulo().hide();
                base.Control.BtnAgregarGrupo().hide();
            }
        },
        OrdenarLista: function (lista, propiedad, ascendente) {
            return lista.sort(function (a, b) {
                if (ascendente) return (a[propiedad] > b[propiedad]);
                else return (b[propiedad] > a[propiedad]);
            });
        },
        CargarProyecto: function (evento) {

            base.Parameters.Proyecto = evento;

            base.Parameters.Cliente = {
                CodigoCliente: evento.CodigoCliente,
                NombreCliente: evento.NombreCliente,
                DocumentoContacto: evento.DocumentoContacto,
                NombreContacto: evento.NombreContacto,
                CorreoElectronicoContacto: evento.CorreoElectronicoContacto,
                TelefonoContacto: evento.TelefonoContacto
            };
            //base.Control.TxtCliente().tokenInput('add', base.Parameters.Cliente);
            base.Control.TxtCliente().val(evento.NombreCliente);
            base.Control.TxtCodigo().val(evento.CodigoProyecto);
            base.Control.TxtNombreProyecto().val(evento.NombreProyecto);
            base.Control.SlcTipoProyecto().val(evento.CodigoTipoProyecto);
            base.Control.SlcMoneda().val(evento.CodigoMoneda);
            base.Control.TxtFechaProyecto().val(evento.FechaProyecto);
            base.Control.TxtLugarProyecto().val(evento.LugarProyecto);
            base.Control.TxtEncargadoProyecto().val(evento.NombreUsuarioCompleto);
            base.Control.TxtObjetivo().val(evento.Objetivo);
            base.Control.TxtObservaciones().val(evento.Observaciones);
            base.Function.CargarCliente(base.Parameters.Cliente)
            base.Function.CargarDetalle(evento.ListaProyectoDetalle);

        },
        CargarDetalle: function (listaDetalle) {
            base.Function.CrearGrid();

            listaDetalle = base.Function.OrdenarLista(listaDetalle, 'NombreGrupo', true);
            var detalleActual = null;
            var detalleAnterior = null;

            var contadorGrupo = 0;

            for (var i = 0; i < listaDetalle.length; i++) {
                detalleActual = listaDetalle[i];

                if (detalleAnterior == null || detalleActual.NombreGrupo != detalleAnterior.NombreGrupo) {
                    base.Function.CrearGrupo(detalleActual.NombreGrupo);
                    base.Control.GriDetalle.Accordion.accordion("option", "active", contadorGrupo);
                    contadorGrupo++;
                }
                base.Function.CrearRow(detalleActual);
                detalleAnterior = detalleActual
            }

            base.Function.CalcularSubTotal();
        },
        CargarCliente: function (item) {
            base.Control.TxtContacto().val(item.NombreContacto);
            base.Control.TxtNumeroDocumento().val(item.DocumentoContacto);
            base.Control.TxtCorreoElectronico().val(item.CorreoElectronicoContacto);
            base.Control.TxtTelefono().val(item.TelefonoContacto);
        },
        CrearGrid: function () {
            base.Control.DivGridDetalleContainer().html('');
            var columns = new Array();
            columns.push({ data: 'CodigoArticuloProveedor', title: '', width: '10%', type: 'checkbox' });
            columns.push({ data: 'NombreArticulo', title: 'Descripcion', width: '40%', type: 'label' });
            columns.push({ data: 'NombreProveedor', title: 'Proveedor', width: '20%', type: 'label' });
            columns.push({ data: 'Cantidad', title: 'Cantidad', width: '10%', type: 'text', format: 'integer' });
            columns.push({ data: 'PrecioUnitario', title: 'Precio SIGV', width: '10%', type: 'text', format: 'decimal' });
            columns.push({ data: 'MontoTotal', title: 'Sub Total', width: '10%', type: 'label' });

            var cabecera = base.Function.CrearHeader(columns);

            var accordion = $('<div></div>');
            accordion.attr('id', 'accordionDetalle').accordion({
                heightStyle: 'content',
                icons: null
            });


            base.Control.GriDetalle.Columns = columns
            base.Control.GriDetalle.Accordion = accordion;

            base.Control.DivGridDetalleContainer().append(cabecera);
            base.Control.DivGridDetalleContainer().append(accordion);

        },
        CrearGrupo: function (titulo) {
            var h3 = $('<h3></h3>');
            h3.attr('style', 'height: 50px; padding-top: 8px; padding-left: 10px;padding-right: 10px; background: #F5F6FA; border-bottom: 2px solid #c6c6c6; cursor:pointer');

            var labelTitulo = $('<input></input>').val(titulo);
            labelTitulo.attr('style', 'width: 50%; padding-left: 10px');
            labelTitulo.addClass('form-control nombreGrupo');

            var labelMonto = $('<label></label>');
            labelMonto.attr('style', 'width: 10%; text-align: center');

            h3.append(labelTitulo);
            h3.append(labelMonto);

            var div = $('<div></div>');
            div.attr('style', 'padding: 0px; overflow-x:hidden');

            var table = $('<table></table>');
            table.attr('class', 'table table-striped table-bordered table-hover text-center text-middle dataTable no-footer');
            table.attr('role', 'grid');
            table.attr('style', 'width: 100%; margin: 0px !important');
            div.append(table);

            var tbody = $('<tbody></tbody>');
            table.append(tbody);

            base.Control.GriDetalle.Accordion.append(h3);
            base.Control.GriDetalle.Accordion.append(div);
            base.Control.GriDetalle.Accordion.accordion("refresh");

            base.Control.GriDetalle.Accordion.find("h3 input").on('keydown', function (e) {
                e.stopPropagation();
            });

        },
        CrearHeader: function (columns) {
            var tableHeader = $('<table></table>')
            tableHeader.addClass('table table-striped table-bordered table-hover text-center text-middle dataTable no-footer');
            tableHeader.attr('style', 'width: 100%; margin: 0px !important');
            tableHeader.attr('role', 'grid');

            var thead = $('<thead></thead>');
            var tr = $('<tr></tr>');


            $(columns).each(function (index, column) {
                var td = $('<th></th>');
                td.addClass('sorting_disabled');
                td.css('width', column.width);
                td.html(column.title);
                tr.append(td);
            });

            thead.append(tr);
            tableHeader.append(thead);
            return tableHeader;
        },
        CrearRow: function (articulo) {
            var cabeceraActiva = base.Control.GriDetalle.Accordion.find('h3[aria-selected="true"]');            
            var tbody = cabeceraActiva.next().find('tbody');
            var tr = $('<tr></tr>');

            $(base.Control.GriDetalle.Columns).each(function (index, column) {
                var td = $('<td></td>');
                td.addClass('sorting_disabled');
                td.css('width', column.width);
                var control = null;

                if (column.type == 'checkbox') {
                    control = $('<input type="checkbox" />').val(articulo[column.data]);
                } else if (column.type == 'text') {
                    if (column.data == "Cantidad") {
                        control = $('<input type="text" style="text-align: right" mask="' + column.format + '" />').val(articulo[column.data]).addClass('form-control').attr("Cantidad", articulo[column.data]);
                        control.keyup(function () { base.Event.GridDetalleKeyup(this) });
                        control.blur(function () {
                            var cambia = base.Function.ValidarCantidadEliminar(base.Parameters.Proyecto.CodigoProyecto, $(this).closest("tr").find("input:checkbox").val(), parseInt($(this).val()));
                            if (!cambia) {
                                base.Control.Mensaje.Warning({
                                    message: "La Cantidad ya fue asignada a una Orden de Compra, verifique"
                                });
                                $(this).val($(this).attr("Cantidad"));
                                previousCantidad = "";
                            } else {
                                $(this).attr("Cantidad", $(this).val());
                            }
                            base.Event.GridDetalleKeyup(this);
                        });
                    } else {
                        control = $('<input type="text" style="text-align: right" mask="' + column.format + '" />').val(articulo[column.data]).addClass('form-control');
                        control.keyup(function () { base.Event.GridDetalleKeyup(this) });
                    }
                } else {

                    if (column.data == 'MontoTotal') {
                        var monto = articulo['Cantidad'] * articulo['PrecioUnitario'];
                        control = $('<label></label>').html(monto);
                    } else {
                        control = $('<label></label>').html(articulo[column.data]);
                    }
                }

                control.addClass(column.data);

                td.append(control);

                tr.append(td);
            });
            tbody.append(tr);

            Pe.GMD.UI.Web.Components.TextBox.Function.Configure(base.Control.DivGridDetalleContainer().attr('id'));
        },
        ObtenerDataDetalle: function () {
            var cabecerasGrupo = base.Control.DivGridDetalleContainer().find('h3');
            var listaDetalle = new Array();


            $(cabecerasGrupo).each(function (x, cabeceraGrupo) {

                var nombreGrupo = $(cabeceraGrupo).find('.nombreGrupo').val();
                var div = $(cabeceraGrupo).next();
                var filas = div.find('tr');

                $(filas).each(function (i, item) {
                    var fila = $(item);
                    var codigoArticuloProveedor = fila.find('.CodigoArticuloProveedor').val();
                    var cantidad = parseInt(fila.find('.Cantidad').val());
                    var precioUnitario = parseFloat(fila.find('.PrecioUnitario').val());
                    listaDetalle.push({
                        CodigoArticuloProveedor: codigoArticuloProveedor,
                        PrecioUnitario: precioUnitario.toString(),
                        Cantidad: cantidad,
                        NombreGrupo: nombreGrupo
                    });
                });
            });

            return listaDetalle;

        },
        ObtenerValidacionesAdicionales: function () {
            var validaciones = new Array();
            validaciones.push(
                    {
                        Event: function () {
                            var resultado = (base.Parameters.Cliente != null);
                            return resultado;
                        },
                        codeMessage: 'EtiquetaCliente'
                    }
                );
            return validaciones;
        },
        ValidarCantidadEliminar: function (CodigoProyecto, CodigoArticuloProveedor, Cantidad) {
            var result = true;
            var data = {
                CodigoProyecto: CodigoProyecto,
                CodigoArticuloProveedor: CodigoArticuloProveedor
            }
            var CantidadAsignada = 0;
            var ajaxRequest = $.ajax({
                type: "post",
                url: Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.Actions.ValidarItemsProyecto,
                async: false,
                cache: false,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                data: JSON.stringify(data),
                beforeSend: function (jqXHR, settings) {
                }
            });
            ajaxRequest.done(function (data) {
                CantidadAsignada = data.Result;
            });
            ajaxRequest.fail(function (jqXHR, textStatus, errorThrown) {
            });
            ajaxRequest.always(function (jqXHR, textStatus) {
            });

            if (Cantidad <= parseInt(CantidadAsignada)) {
                result = false;
            }
            return result;
        },
        CalcularSubTotal: function () {
            var montos = base.Control.GriDetalle.Accordion.find('.MontoTotal');
            var subTotal = 0;
            var igv = 0;
            var total = 0;

            $(montos).each(function (i, monto) {
                subTotal += parseFloat($(monto).html());
            });
            base.Control.TxtSubTotal().val(subTotal);
            Pe.GMD.UI.Web.Components.TextBox.Function.FormatDecimal({
                input: base.Control.TxtSubTotal()
            });

            igv = subTotal * 0.18;
            base.Control.TxtIgv().val(igv);
            Pe.GMD.UI.Web.Components.TextBox.Function.FormatDecimal({
                input: base.Control.TxtIgv()
            });

            total = subTotal + parseFloat(base.Control.TxtIgv().val());
            base.Control.TxtTotal().val(total);
            Pe.GMD.UI.Web.Components.TextBox.Function.FormatDecimal({
                input: base.Control.TxtTotal()
            });
        }
    };

};


ns('Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.FormularioRegistro');
try {

    $(document).ready(function () {
        'use strict';
        Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.FormularioRegistro.Vista = new Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.FormularioRegistro.Controller();
        Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.FormularioRegistro.Vista.Ini();
    });
} catch (ex) {
}